package cn.tedu;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

public class Test4 {
    public static void main(String[] args) {
        //1,创建对象 --泛型约束里的类型是 引用类型 不能是基本类型
        Collection<Integer> c = new ArrayList<>();
        //2,调用方法
        c.add(1);//---------------自动装箱 Integer i=new Integer(1);
        c.add(2);
        c.add(3);
        c.add(4);
        c.add(5);//boolean add(E e)：添加元素。
        System.out.println(c.add(5));
        System.out.println(c);//[1, 2, 3, 4, 5]
        //        c.clear(); //清空集合
        //boolean contains(Object o) ： 如果此 collection 包含指定的元素，则返回 true
        System.out.println(c.contains(5));//判断c集合中是否包含5-------------自动拆箱  int x=i.intValue();
        System.out.println(c.equals(123));//判断c集合和123是否相等
        System.out.println(c.hashCode());//获取c的哈希码值
        //boolean remove(Object o) ：从此 collection 中移除指定元素的单个实例。
        System.out.println(c.remove(3));//移除3是否成功
        //boolean isEmpty() ：如果此 collection 没有元素，则返回 true。
        System.out.println(c.isEmpty());//判断c是否为空
        //int size() ：返回此 collection 中的元素数。
        System.out.println(c.size());//获取c集合的长度
        //Objec[] toArray()：返回对象数组
        Object[] os = c.toArray();//集合 转 数组
        System.out.println(Arrays.toString(os));//[1, 2, 4, 5]
        //TODO 集合间的操作
        Collection<Integer> c2 = new ArrayList<>();
        c2.add(100);
        c2.add(2);
        //boolean addAll(Collection  c)：把小集合添加到大集合中 。
        System.out.println(c.addAll(c2));//把c2加到c里 -->1 2 4 5 100 2
        System.out.println(c.containsAll(c2));//判断c里包含c2吗
        //        System.out.println( c.removeAll(c2) );//移除交集
        //        System.out.println( c.retainAll(c2) );//保留交集
        //TODO 获取集合里的元素
        //方式一:: Iterator<E> iterator() -- 返回在此 collection 的元素上进行迭代的迭代器Iterator,
        // 专门用来迭代集合里的元素
        Iterator it = c.iterator();
        while (it.hasNext()) {//hasNext()判断有元素吗,有的话就返回true
            Object o= it.next();//next()获取元素
            System.out.println(o);
        }
        //方式二:: foreach -- Collection接口也可以用
        //语法: for(数据的类型  变量名 : 容器){}
        for (Integer in : c) {
            System.out.println(in);
        }
    }
}
